package it.enrico.mangamania.inventario.server;

import it.enrico.mangamania.inventario.client.Fumetto;
import it.enrico.mangamania.inventario.client.GreetingService;
import it.enrico.mangamania.inventario.client.SalvaFumettoService;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.Query;

/**
 * The server side implementation of the RPC service.
 */
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
		GreetingService, SalvaFumettoService {

	public String greetServer(String input) throws IllegalArgumentException {
		// Verify that the input is valid. 
		if (!FieldVerifier.isValidName(input)) {
			// If the input is not valid, throw an IllegalArgumentException back to
			// the client.
			throw new IllegalArgumentException(
					"Name must be at least 4 characters long");
		}

		String serverInfo = getServletContext().getServerInfo();
		String userAgent = getThreadLocalRequest().getHeader("User-Agent");
		return "Hello, " + input + "!<br><br>I am running " + serverInfo
				+ ".<br><br>It looks like you are using:<br>" + userAgent;
	}

	public String salvaFumetto(Fumetto fumetto) {
		
		Objectify ofy = ObjectifyFactory.getObjectify();
		ofy.put(fumetto);
		return "OK";
	}

	public List<Fumetto> retrieveFumettiByName(String nameFragment) {
		
		List<Fumetto> fumetti = new ArrayList<Fumetto>();
		
		Objectify ofy = ObjectifyFactory.getObjectify();
		
		Query<Fumetto> q = ofy.query(Fumetto.class);
		for (Fumetto fumetto: q) {
			if (fumetto.getNome().contains(nameFragment))
			fumetti.add(fumetto);
		}
		
		return fumetti;
		
	}

	public List<Fumetto> retireveFumetti() {
		List<Fumetto> fumetti = new ArrayList<Fumetto>();
		Objectify ofy = ObjectifyFactory.getObjectify();
		
		Query<Fumetto> q = ofy.query(Fumetto.class);
		for (Fumetto fumetto: q) {
			fumetti.add(fumetto);
		}
		
		return fumetti;
	}

	public List<Fumetto> retrieveFumettiByNameEdizioni(String fragment) {
		// TODO Auto-generated method stub
		return null;
	}
	
	private void doPost() {
		System.out.println("ciao");

	}

	public String deleteFumetti(List<Fumetto> fumetti) {
		Objectify ofy = ObjectifyFactory.getObjectify();
		Iterable<Key<Fumetto>> allKeys = ofy.query(Fumetto.class).fetchKeys();
		fumetti = null;
		ofy.delete(allKeys);
		return "OK";
	}
}
